package viroyal.com.base.util;

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import viroyal.com.base.listener.TimerTaskListener;


/**
 * @author chenjunwei
 * @desc
 * @date 2019/6/21
 */
public class TimerManagerUtil {
  /**
   * 时间间隔(一天)
   */
  public static final long PERIOD_DAY = 24 * 60 * 60 * 1000;

  public static void timerTask(TimerTaskListener timerTaskListener) {
    Calendar calendar = Calendar.getInstance();
    //凌晨0点
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    //第一次执行定时任务的时间
    Date date = calendar.getTime();
    //如果第一次执行定时任务的时间 小于当前的时间
    //此时要在 第一次执行定时任务的时间加一天，以便此任务在下个时间点执行。如果不加一天，任务会立即执行。
    if (date.before(new Date())) {
      date = addDay(date, 1);
    }

    Timer timer = new Timer();
    TimerTask timerTask = new TimerTask() {
      @Override
      public void run() {
        timerTaskListener.setOnTimerTaskListener();
      }
    };
    //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
    timer.schedule(timerTask, date, PERIOD_DAY);
  }

  /**
   * 增加或减少天数
   *
   * @param date
   * @param num
   * @return
   */
  public static Date addDay(Date date, int num) {
    Calendar startDT = Calendar.getInstance();
    startDT.setTime(date);
    startDT.add(Calendar.DAY_OF_MONTH, num);
    return startDT.getTime();
  }

}
